home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / crypto / rng.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.8 KB  |  76 lines

  1. /*
  2.  * RNG: Random Number Generator  algorithms under the crypto API
  3.  *
  4.  * Copyright (c) 2008 Neil Horman <nhorman@tuxdriver.com>
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify it
  7.  * under the terms of the GNU General Public License as published by the Free
  8.  * Software Foundation; either version 2 of the License, or (at your option)
  9.  * any later version.
  10.  *
  11.  */
  12.  
  13. #ifndef _CRYPTO_RNG_H
  14. #define _CRYPTO_RNG_H
  15.  
  16. #include <linux/crypto.h>
  17.  
  18. extern struct crypto_rng *crypto_default_rng;
  19.  
  20. int crypto_get_default_rng(void);
  21. void crypto_put_default_rng(void);
  22.  
  23. static inline struct crypto_rng *__crypto_rng_cast(struct crypto_tfm *tfm)
  24. {
  25.     return (struct crypto_rng *)tfm;
  26. }
  27.  
  28. static inline struct crypto_rng *crypto_alloc_rng(const char *alg_name,
  29.                           u32 type, u32 mask)
  30. {
  31.     type &= ~CRYPTO_ALG_TYPE_MASK;
  32.     type |= CRYPTO_ALG_TYPE_RNG;
  33.     mask |= CRYPTO_ALG_TYPE_MASK;
  34.  
  35.     return __crypto_rng_cast(crypto_alloc_base(alg_name, type, mask));
  36. }
  37.  
  38. static inline struct crypto_tfm *crypto_rng_tfm(struct crypto_rng *tfm)
  39. {
  40.     return &tfm->base;
  41. }
  42.  
  43. static inline struct rng_alg *crypto_rng_alg(struct crypto_rng *tfm)
  44. {
  45.     return &crypto_rng_tfm(tfm)->__crt_alg->cra_rng;
  46. }
  47.  
  48. static inline struct rng_tfm *crypto_rng_crt(struct crypto_rng *tfm)
  49. {
  50.     return &crypto_rng_tfm(tfm)->crt_rng;
  51. }
  52.  
  53. static inline void crypto_free_rng(struct crypto_rng *tfm)
  54. {
  55.     crypto_free_tfm(crypto_rng_tfm(tfm));
  56. }
  57.  
  58. static inline int crypto_rng_get_bytes(struct crypto_rng *tfm,
  59.                        u8 *rdata, unsigned int dlen)
  60. {
  61.     return crypto_rng_crt(tfm)->rng_gen_random(tfm, rdata, dlen);
  62. }
  63.  
  64. static inline int crypto_rng_reset(struct crypto_rng *tfm,
  65.                    u8 *seed, unsigned int slen)
  66. {
  67.     return crypto_rng_crt(tfm)->rng_reset(tfm, seed, slen);
  68. }
  69.  
  70. static inline int crypto_rng_seedsize(struct crypto_rng *tfm)
  71. {
  72.     return crypto_rng_alg(tfm)->seedsize;
  73. }
  74.  
  75. #endif
  76.